1. 错误的处理
Go 程序使用 error
值来表示错误状态。
与 fmt.Stringer
类似,error
类型是一个内建接口:
1 2 3
| type error interface { Error() string }
|
(与 fmt.Stringer
类似,fmt
包在输出时也会试图匹配 error
。)
通常函数会返回一个 error
值,调用的它的代码应当判断这个错误是否等于 nil
, 来进行错误处理。
1 2 3 4 5
| i, err := strconv.Atoi("42") if err != nil { fmt.Printf("couldn't convert number: %v\n", err) } fmt.Println("Converted integer:", i)
|
error
为 nil 时表示成功;非 nil 的 error
表示错误
注意:上述简介说明了,接口类型的变量,零值为nil。这里说了,一般处理错误的方式为,判断返回的err是否为nil,如果err不为nil,表示有错误发生,否则表示没有错误
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
package main
import ( "fmt" "time" )
type Myerror struct { When time.Time What string }
func (e *Myerror) Error() string { return fmt.Sprintf("at %v, %s", e.When, e.What) }
func run() error { return &Myerror{ time.Now(), "It didn't work", } }
func main() { if err := run(); err != nil { fmt.Println(err) }
}
|